﻿namespace KinonekoSoftware.CodariaDB.Documents.Notions
{
    /// <summary>
    /// <see cref="INotion"/> 接口表示当前对象是可以被当做灵感的。
    /// </summary>
    /// <remarks>
    /// <para><see cref="INotion"/> 接口可以被当做灵感，进而可以通过添加细节，不断完善、丰富这个印象！支持的印象完善操作：</para>
    /// <para>1. 添加标签。</para>
    /// <para>2. 诠释印象。</para>
    /// <para>3. 作为灵感来源。</para>
    /// <para>4. 离散创作和再组合。</para>
    /// <para>5. 用来整活。</para>
    /// </remarks>
    public interface INotion
    {
        string Id       { get; }
        string Name     { get; }

        // <summary>
        // <see cref="INotion"/> 类型接口需要默认实现软删除，以实现不可变性。
        // </summary>
        // <remarks>
        // 实现不可变性有两种办法，一种是在外部修改时不允许修改已经引用的对象（但是这些对象实际上并不容易记录，很容易让数据库规模翻番）；另一种办法是外部修改和内部修改隔离，也就是存一个副本。
        // </remarks>
        // bool IsDeleted { get; }
    }
}